const orderModel = require('../db/order')
const cartModel = require('../db/cart')
const menuModel = require('../db/menu')
module.exports = {
    getorder(req,res){
        res.send('生成订单')
        // 接收结算的所有购物车数据的id  ->  123465,456789
        // 接收结算的时候选择的进食方式 -> 堂食/打包
        // 接收结算的时候总价
        let {ids, mode, totalprice, userid} = req.body
        ids = ids.split(',') // 分割为一个数组
        // 到购物车表中查询所有的购物车数据
        cartModel.find({_id: {$in: ids}}, (err, docs) => {
            if(err) {
                throw new Error(err)
            }
            // console.log(docs) // [{_id: XX, menuid: xxx, userid:xxx,num:xx, ...}, {}]
            // 从数组中获取到所有的商品id
            let menuids = docs.map(item => item.menuid) // [商品id, 商品id]
            // 通过多个商品id查询所有商品数据
            menuModel.find({_id: {$in: menuids}}, (err, docs) => {
                if(err) {
                    throw new Error(err)
                }
                // console.log(docs); // [{_id: XX, name: xxx, price:xxx,imgpath:xx, ...}, {}]
                // 获取第一个商品的名称
                let menuname = docs[0].name
                // 生成订单号
                let orderno = +new Date() + Math.floor(Math.random() * 899999) + 100000
                // 定义订单状态
                let status = '已付款'
                // 取餐码 - 今天的第几个
                // 生成今天的开始时间戳和今天的结束时间戳
                let now = +new Date() // 当前时间戳
                let day = now / 1000 / 60 / 60 / 24
                let start = Math.floor(day) * 1000 * 60 * 60 * 24
                let end = Math.ceil(day) * 1000 * 60 * 60 * 24
                // console.log(start,end); // 1678492800000 1678579200000
                // 查询订单表，找到在这个时间段的最后一个数据
                orderModel.find({time: {$gt: start, $lt: end}}, (err, docs) => {
                    if(err) {
                        throw new Error(err)
                    }
                    // 判断查询出来的数据数量
                    if(docs.length) {
                        // 取餐码是数量 + 1
                        code = docs.length + 1
                        // 不够4位数，前面补0
                        if(code < 10) {
                            code = '000' + code
                        } else if(code < 100) {
                            code = '00' + code
                        } else if(code < 1000) {
                            code = '0' + code
                        }
                    } else {
                        // 如果今天还没有数据，取餐码为1
                        code = '0001'
                    }
                    // 将数据添加到订单表
                    orderModel.insertMany({
                        orderno,
                        mode,
                        menuname,
                        code,
                        totalprice,
                        status,
                        userid
                    }, (err, docs) => {
                        if(err) {
                            throw new Error(err)
                        }
                        // 删除购物车表的数据
                        cartModel.deleteMany({_id: {$in: ids}}, (err, docs) => {
                            if(err) {
                                throw new Error(err)
                            }
                            res.json({
                                error_code: 0,
                                msg: '支付成功！'
                            })
                        })
                    })
                })
            })
        })
    }
}